package br.com.cast.syscast.municipio.paginas;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.cast.syscast.HomePage;
import br.com.cast.syscast.models.Municipio;
import br.com.cast.syscast.services.IMunicipioService;
import br.com.cast.syscast.util.ComponentUtil;

public class ListarMunicipio extends Panel {

	private static final long serialVersionUID = 1L;
	
	@SpringBean
	private IMunicipioService municipioService;

	private CadastroMunicipio cadastroMunicipio;
	
	public ListarMunicipio(String id) {
		super(id);
		
		setOutputMarkupId(true);
		
		cadastroMunicipio = new CadastroMunicipio(HomePage.ID_CONTEUDO);
		
		criaLinkIncluir();
		
		DataView<Municipio> dataView = criaDateView();
		
		criaPaginacao(dataView);
	}

	private void criaPaginacao(DataView<Municipio> dataView) {
		add(new PagingNavigator("paginacao", dataView));
	}

	private DataView<Municipio> criaDateView() {
		DataView<Municipio> dataView = new DataView<Municipio>("municipios", municipioService) {

			@Override
			protected void populateItem(final Item<Municipio> item) {
				
				if (item.getIndex() % 2 != 0) {
					//para linhas impares adiciona um estilo diferente.
					//o indice começa no zero
					item.add(AttributeModifier.replace("class", "alt"));
				}
				
				item.add(new Label("nome"));
				item.add(new Label("uf.sigla"));
				item.add(new Label("uf.pais.nome"));
				
				item.add(new Link("alterar") {
					@Override
					public void onClick() {
						cadastroMunicipio.atualizaModel(item.getDefaultModelObject());
						redirecionaCadastro();
					}

				});
				
				item.add(new AjaxLink("excluir") {

					@Override
					public void onClick(AjaxRequestTarget target) {
						Municipio municipio = (Municipio) item.getDefaultModelObject();
						municipioService.excluir(municipio.getId());
						HomePage template = ComponentUtil.getTemplate(this);
						template.success("Registro excluído com sucesso!");
						
						target.add(template.get("msgErro"));
						target.add(template.get("msgSucesso"));
						target.add(template.get(HomePage.ID_CONTEUDO));
					}
					
				});
				
			}
			
		};
		
		dataView.setItemsPerPage(5);
		
		add(dataView);
		return dataView;
	}

	private void criaLinkIncluir() {
		add(new AjaxLink("incluir") {
			@Override
			public void onClick(AjaxRequestTarget target) {
				redirecionaCadastro();
				target.add(cadastroMunicipio);
			}
		}); 
	}

	private void redirecionaCadastro() {
		HomePage template = ComponentUtil.getTemplate(this);
		template.replace(cadastroMunicipio);
	}
}
